<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>高阶函数_函数柯里化</title>
    <!-- 引入react引入核心库, 需要按顺序引入 -->
    <script type="text/javascript" src="../js/react.development.js"></script>
    <!-- 引入react-dom, 用于支持react操作DOM -->
    <script type='text/javascript' src='../js/react-dom.development.js'></script>
    <!-- 引入babel，用于将jsx转为js -->
    <script type='text/javascript' src='../js/babel.min.js'></script>

</head>
<body>
    <div id="test"></div>

    <script type="text/babel">

        /**
         * 高阶函数：如果一个函数符合下面2个规范中的任意一个，该函数即为高阶函数
         *  1.若A函数接收的参数是一个函数，那么A即为高阶函数
         *  2.若A函数调用的返回值依然是一个函数，那么A为高阶函数
         * 常见的高阶函数：
         *  Promise 
         *  setTimeout
         *  arr.map()
         *  bind()
         * 
         * 函数的柯里化：通过函数调用继续返回函数的方式，实现多次接收参数最后
         *          统一处理的函数编码形式。
         *  
         * 
         */

      class Login extends React.Component{
          state = { // 初始化状态
              username: "",
              password: "123"
          }
          render(){
              return(
                  <form onSubmit={this.handleLogin}>
                    {// <label htmlFor="username">用户名：</label>
                    // <input id="username" type="text" /><br/>
                }
                    用户名：<input type="texnCht" onChange={this.saveFormData("username")} /><br/>
                    密码：<input type="password" onChange={this.saveFormData("password")} /><br/>
                    <button>登陆</button>
                    </form>
              )
          }

          saveFormData = (type) =>{
              return (event)=>{
                  this.setState({[type]:event.target.value})
                }
          }

        //   // 保存用户名到State中
        //   saveUsername = (event)=>{
        //       this.setState({username:event.target.value})
        //   }
        //   // 保存密码到state中
        //   savePassword = (event)=>{
        //       this.setState({password:event.target.value})
        //   }
          handleLogin = (event)=>{
              event.preventDefault()
              const {username,password} = this.state
              alert(
                  `用户名：${username}, 密码：${password}`
              ) 
          }

      }


      ReactDOM.render(<Login/>,document.getElementById('test'))
    </script>
</body>
</html>